home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
lisp
/
xlisp
/
amiga
/
xlisp2.arc
/
example.lsp
< prev
next >
Wrap
Lisp/Scheme
|
1988-11-17
|
2KB
|
75 lines
; Make the class ship and its instance variables be known
(setq ship (Class :new '(x y xv yv m name captain registry)))
(ship :answer :getx '() '( x )) ; just evaluate x
(ship :answer :getxv '() '( xv )) ; note that the method is a
(ship :answer :gety '() '( y )) ; list of forms, the value
(ship :answer :getyv '() '( yv )) ; of the last one being the
(ship :answer :getm '() '( m )) ; value of the method
(ship :answer :getname '() '( name ))
(ship :answer :getcaptain '() '( captain ))
(ship :answer :getregistry '() '( registry ))
; formal
; param
; of
; method
(ship :answer :setx '(to) '( (setq x to) ) )
(ship :answer :setxv '(to) '( (setq xv to) ) )
(ship :answer :sety '(to) '( (setq y to) ) )
(ship :answer :setyv '(to) '( (setq yv to) ) )
(ship :answer :setm '(to) '( (setq m to) ) )
(ship :answer :setname '(to) '( (setq name to) ) )
(ship :answer :setcaptain '(to) '( (setq captain to) ) )
(ship :answer :setregistry '(to) '( (setq registry to) ) )
(ship :answer :sail '(time)
; the METHOD for sailing
'( (princ (list "sailing for " time " hours\n"))
; note that this form is expressed in terms of objects: "self"
; is bound to the object being talked to during the execution
; of its message. It can ask itself to do things.
(self :setx (+ (self :getx)
(* (self :getxv) time)))
; This form performs a parallel action to the above, but more
; efficiently, and in this instance, more clearly
(setq y (+ y (* yv time)))
; Cute message for return value. Tee Hee.
"Sailing, sailing, over the bountiful chow mein..."))
; <OBJECT: #12345667> is not terribly instructive. How about a more
; informative print routine?
(ship :answer :print '() '((princ (list
"SHIP NAME: " (self :getname) "\n"
"REGISTRY: " (self :getregistry) "\n"
"CAPTAIN IS: " (self :getcaptain) "\n"
"MASS IS: " (self :getm) " TONNES\n"
"CURRENT POSITION IS: "
(self :getx) " X BY "
(self :gety) " Y\n"
"SPEED IS: "
(self :getxv) " XV BY "
(self :getyv) " YV\n") ) ))
; a function to make life easier
(defun newship (mass name registry captain &aux new)
(setq new (ship :new))
(new :setx 0)
(new :sety 0)
(new :setxv 0)
(new :setyv 0)
(new :setm mass)
(new :setname name)
(new :setcaptain captain)
(new :setregistry registry)
(new :print)
new)
; and an example object.
(setq Bounty (newship 50 'Bounty 'England 'Bligh))